package com.demo.Sort;


/**
 * 算法:冒泡排序
 */
public class bubbleSort {
    public static void main(String[] args) {
        int[] a = {51, 15, 36, 37, 12, 75, 23, 17, 76, 01};
        //冒泡排序 1
        bubbleSort1(a, a.length);
        for (int i : a) {
            System.out.print("  " + i);
        }
        System.out.println("    ");
        //冒泡排序2
        bubbleSort2(a, a.length);
        for (int i : a) {
            System.out.print("  " + i);
        }
    }

    /**
     * a 是数组
     * b 是数组的长度
     *
     * @param a
     * @param b
     */
    private static void bubbleSort1(int[] a, int b) {
        int i, j;
        //每一次循环 数组的长度-1
        for (i = b - 1; i > 0; i--) {
            // 循环的次数 i
            for (j = 0; j < i; j++) {
                //如果成立 就替换
                if (a[j] > a[j + 1]) {
                    //存入 第一位的值
                    int tmp = a[j];
                    //将第二位的值存入第一位
                    a[j] = a[j + 1];
                    a[j + 1] = tmp;
                }
            }
        }
    }

    /**
     * 冒泡排序   （自我编写）
     *
     * @param a 数组
     * @param b 数组长度
     */
    private static void bubbleSort2(int[] a, int b) {
        int i, j;
        int flag;   //给个标记 如果为1的话就代表排序过
        for (i = b - 1; i > 0; i--) {
            flag = 0; //初始化标记为0
            for (j = 0; j < i; j++) {
                if (a[j] > a[j + 1]) {
                    //存入 第一位的值
                    int tmp = a[j];
                    //将第二位的值存入第一位
                    a[j] = a[j + 1];
                    a[j + 1] = tmp;

                    flag = 1; //如果发生交换就为1
                }
            }
            if (flag == 0) {
                break;   //如果没有发生交换 就代表是有序的直接跳出
            }
        }
    }
}